#ifndef __ENTITIES_H__
#define __ENTITIES_H__

#include <vector>
#include <list>
#include <map>

#include "database.h"

using std::string;

class Goods {
protected:
	int				gid;			// 상품코드
	string			category;		// 카테고리
	string			name;		// 상품명
public:
};

class Facility {
protected:
	int				fid;			// 시설코드
	string			name;		// 시설명
	list<int>			charList;		// 시설에 있는 캐릭터 목록
public:
};

class Inn : public Facility {
public:
};

class Shipyard : public Facility {
	vector<int>		shipList_avail;	// 제작가능 배 목록
	map<int,int>		shipList_sale;	// 판매중인 배 및 가격
public:
};

class Pub : public Facility {
public:
};

class Bank : public Facility {
};

class City {
protected:
	int				cid;			// 도시번호
	string			name;		// 도시명
	int				x, y;			// 맵상좌표
	int				nation;		// 소속국가
	map<int,int>		investTable_industry;	// 공업투자
	map<int,int>		investTable_commercial;	// 상업투자
	vector<int>		facilityList;		// 시설목록
	list<int>			charList;		// 도시에있는 캐릭터목록
public:
};

class Nation {
protected:
	vector<int>		cityList;		// 동맹항 목록
public:
};

class ShipSpec {
protected:
	int				specid;			// id
	string			name;			// 이름
	int				sail;				// 추진력
	int				rudder;			// 선회력
	int				hull;				// 내구력
	int				totalCapacity;		// 적재량
	int				maxCrew;			// 최대승무원
	int				minCrew;			// 최소승무원
public:
};

class Ship {
protected:
	int				shipid;			// id
	string			name;			// 이름

	int				sail;				// 추진력
	int				rudder;			// 선회력
	int				hull;				// 내구력

	int				food;				// 식량
	int				water;			// 물
	int				ammo;			// 탄약

	int				crewCapacity;		// 선원적재
	int				cargoCapacity;		// 화물적재
	int				armCapacity;		// 무기적재

	int				seeCrewCapacity;	// 탐색선원
	int				sailCrewCapacity;		// 운항선원
	int				deckCrewCapacity;	// 갑판선원

	int				seeCrew;			// 탐색선원수
	int				sailCrew;			// 운항선원수
	int				deckCrew;			// 갑판선원수

	vector<int>		goodsList;			// 상품목록
	map<int,int>		goodsAmountTable;	// 상품개수표

	int				weaponType;		// 무기(포)타입
	int				weaponAmount;		// 무기(포)개수(문)
	
	int				statue;			// 선수상(id)

	int				captain;			// 선장(캐릭터id)
};
 

class Character {
protected:
	int				charid;
	string			name;			// 이름
	int				nation;			// 국적
	int				age;				// 나이

	int				level_sail;			// 항해레벨
	int				level_battle;		// 전투레벨

	int				fame_trade;		// 무역명성
	int				fame_adventure; 	// 모험명성
	int				fame_battle;		// 전투명성

	int				leadership;			// 통솔
	int				navigation;			// 항해술
	int				knowledge;			// 지식
	int				intuition;			// 직감
	int				courage;			// 용기
	int				fence;			// 검술
	int				charisma;			// 매력
	int				luck;				// 운 (hidden)

	vector<int>		abilityList;			// 특기 목록

	int				state;			// 상태(항해중, 전투중, 항구)
	int				city;				// 위치(도시id)
	int				x, y;				// 위치(좌표)

	int				equip;			// 장비 아이템

	int				fee;				// 월급
};


class Player {
	string			userid;			// 사용자ID
	int				charid;			// 사용자의 캐릭터
	vector<int>		shipList;			// 사용자가 소유한 배목록
	vector<int>		officerList;			// 사용자가 고용한 캐릭터목록
};

#endif
